// 导入 http 模块
const http = require('http');
// 1、导入 url 模块 nodejs的内置模块、用于解析url
const url = require('url');

/**
 * 方式一： Query请求
 */
const serverQuery = http.createServer((request, response) => {
    // 解决响应数据中文乱码问题
    response.setHeader("Content-Type", "text/html;charset=utf-8")

    // 方式一：通过导入url内置模块、使用url.parse()方法获取 Query请求
    //        解析 request.url、通过使用 url 内的方法、在parse第二个参数中传入 true、将query请求参数编译一个对象，方便获取请求参数
    let res = url.parse(request.url, true)
    console.log(res.pathname); // 请求路径
    console.log(res.query.name, res.query.age); // 获取请求参数

    // 方式二：实例化URL对象、并传入请求路径及IP地址
    let urls = new URL(request.url, 'http://127.0.0.1');
    console.log(urls.pathname); // 获取请求路径
    console.log(urls.searchParams.get('name'), urls.searchParams.get('age')); // 获取请求参数

    response.end('ok')
})
// serverQuery.listen(9000, () => console.log("服务启动成功：http://127.0.0.1:9000"))


/**
 * 方式二：获取Body请求
 *        无论是使用 url内置模块方法、还是实例化URL对象、只能获取Query请求的参数、无法获取Body请求参数
 *        req的本质其实就是一个可读流、我们可以通过流读取获取body请求的参数
 */
const serverBody = http.createServer((req, res) => {
    // 设置可读流为 utf-8
    req.setEncoding('utf-8')

    let val = null
    req.on('data', (data) => {
        // 将字符串解析为对象格式
        val = JSON.parse(data)
    }).on('end', () => {
        console.log("获取完毕:", val.name, val.age);

        res.end('ok')
    })

})
serverBody.listen(9000, () => console.log("服务启动成功：http://127.0.0.1:9000"))
